﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Drawing;
using SmartRfMng.appcode;

namespace SmartRfMng
{
    public class Win32
    {
        public const uint POWER_FORCE = 0x00001000u;
        public const uint POWER_STATE_RESET = 0x00800000u;        // reset state

        [DllImport("coredll.dll")]
        public static extern uint SetSystemPowerState([MarshalAs(UnmanagedType.LPWStr)]string psState, uint StateFlags, uint Options);

        [DllImport("coredll.dll", EntryPoint = "FindWindow")]

        public static extern int FindWindow(string lpWindowName, string lpClassName);
        [DllImport("coredll.dll", EntryPoint = "ShowWindow")]

        public static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);
        [DllImport("coredll.dll", EntryPoint = "SystemParametersInfo")]
        public static extern int SystemParametersInfo(int uAction, int uParam, ref Rectangle lpvParam, int fuWinIni);

        public const int SPI_SETWORKAREA = 47;
        public const int SPI_GETWORKAREA = 48;

        public const int SW_HIDE = 0x00;
        public const int SW_SHOW = 0x0001;
        public const int SPIF_UPDATEINIFILE = 0x01;

        public static bool SetFullScreen(bool fullscreen, ref Rectangle rectOld)
        {
            int Hwnd = 0;
            Hwnd = Win32.FindWindow("HHTaskBar", null);
            if (Hwnd == 0) return false;
            if (fullscreen)
            {
                Win32.ShowWindow((IntPtr)Hwnd, Win32.SW_HIDE);
                Rectangle rectFull = Screen.PrimaryScreen.Bounds;
                Win32.SystemParametersInfo(Win32.SPI_GETWORKAREA, 0, ref rectOld, Win32.SPIF_UPDATEINIFILE);//get
                Win32.SystemParametersInfo(Win32.SPI_SETWORKAREA, 0, ref rectFull, Win32.SPIF_UPDATEINIFILE);//set
            }
            else
            {
                Win32.ShowWindow((IntPtr)Hwnd, Win32.SW_SHOW);
                Win32.SystemParametersInfo(Win32.SPI_SETWORKAREA, 0, ref rectOld, Win32.SPIF_UPDATEINIFILE);
            }
            return true;
        }
    }

    static class Program
    {
        [DllImport("coredll.Dll")]
        private static extern int GetLastError();
        [DllImport("coredll.Dll")]
        private static extern int ReleaseMutex(IntPtr hMutex);
        [DllImport("coredll.Dll")]
        private static extern IntPtr CreateMutex(SECURITY_ATTRIBUTES lpMutexAttributes, bool bInitialOwner, string lpName);
        [StructLayout(LayoutKind.Sequential)]
        public class SECURITY_ATTRIBUTES
        {
            public int nLength;
            public int lpSecurityDescriptor;
            public int bInheritHandle;
        }
        const int ERROR_ALREADY_EXISTS = 0183;

        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [MTAThread]
        static void Main()
        {
            #region Api_Call CreateMutex;
            IntPtr hMutex;
            hMutex = CreateMutex(null, false, "WSLRF");

            if (GetLastError() != ERROR_ALREADY_EXISTS)
            {
                Rectangle rectangle = Screen.PrimaryScreen.Bounds;
                Win32.SetFullScreen(true, ref rectangle);//false为恢复状态栏
                ZT_INI.SetPath();
                Application.Run(new frmLogin());
            }
            else
            {
                MessageBox.Show("本程序只允许同时运行一个！");
                ReleaseMutex(hMutex);
            }
            #endregion
   
        }
    }
}